#include <iostream>
#include <cstring>
using namespace std;
class String
{
public:
	//默认构造函数
	String(const char *str = nullptr);
	//拷贝构造函数
	String(const String &str);
	//析构函数
	~String();
	//字符串赋值函数
	String &operator=(const String &str);

private:
	char *m_data;
	int m_size;
};
String::String(const char *str)
{
	if (str == nullptr)
	{
		m_data = new char[1];
		m_data[0] = '\0'; //对空字符串自动申请存放结束标志\0
		m_size = 0;
	}
	else
	{
		m_size = strlen(str);
		m_data = new char[m_size + 1];
		strcpy(m_data, str);
	}
}
String::String(const String &str)
{
	m_size = str.m_size;
	m_data = new char[m_size + 1];
	strcpy(m_data, str.m_data);
}
String::~String()
{
	delete[] m_data;
}
String &String::operator=(const String &str)
{
	if (this == &str)
		return *this;
	delete[] m_data; //释放原有的内存资源
	m_size = strlen(str.m_data);
	m_data = new char[m_size + 1];
	strcpy(m_data, str.m_data);
	return *this;
}
